package ddd.ajava.chapter5.question2.udp;
import java.net.*;
import java.io.*;
import java.util.*;

public class UdpFileClientMore {
	 public static void main(String[] args) throws FileNotFoundException { 
		 
		try { 
			//***发送数据
			 Scanner input=new Scanner(System.in);
			 System.out.print("请输入你要发送的文件名：");
			 String FileName=input.next();
			 
			 File file=new File(FileName);//创建一个文件
			 input=new Scanner(file);
			 String fileN=file.getName();
			 System.out.print(fileN);
			 byte[] Name= fileN.getBytes();//得到文件名
			
			 FileInputStream readFile=new FileInputStream(file);//从文件中读出内容对象
			 
			 int lengthFile=(int)file.length();//得到文件的长度
			
			 DatagramSocket sendSocket = new DatagramSocket();   // 创建发送方的套接字，IP默认为本地，端口号随机  
		
			 int port = 8888; 
			 int port2 =8889;//发送文件名
			 InetAddress ip = InetAddress.getLocalHost();  // 确定发送方的IP地址及端口号，地址为本地机器地址   
			 
			 byte buf[]=new byte[lengthFile];//创建一个缓冲区
			 
			 readFile.read(buf, 0, buf.length);
			 // 创建发送类型的数据报：  
			DatagramPacket sendPacketFileName = new DatagramPacket(Name, Name.length, ip,  port2); //发送文件名 
			DatagramPacket sendPacket = new DatagramPacket(buf, buf.length, ip,  port);   // 通过套接字发送数据：  
				
			sendSocket.send(sendPacketFileName); //发送文件名 
			sendSocket.send(sendPacket);  
			 //***发送数据
			 
			 //**接受数据			
			 byte[] getBuf = new byte[1024];  // 确定接受反馈数据的缓冲存储器，即存储数据的字节数组  			
			 DatagramPacket getPacket = new DatagramPacket(getBuf, getBuf.length); // 创建接受类型的数据报    	
			 sendSocket.receive(getPacket);  	 // 通过套接字接受数据  		
			 String backMes = new String(getBuf, 0, getPacket.getLength());   // 解析反馈的消息，并打印  
			 System.out.println("接受方返回的消息：" + backMes); 
			//**接受数据
			 
			 // 关闭套接字  
			 sendSocket.close();  
		 } catch (Exception e) {  
			 e.printStackTrace();  
		 }  
	 }
}
